#include <SFML/Graphics.hpp>
#include <iostream>
#include "Button.h"

using namespace std;
using namespace sf;

Button::Button(int hauteur, int largeur, float x, float y) : hauteur(hauteur),largeur(largeur), positionX(x), positionY(y), statusImage(false), statusText(false), backgroundColor(Color(200,200,200)), borderColor(Color::Black){};

void Button::isImage(bool status){
    statusImage = status;
}

void Button::isText(bool status){
    statusText = status;
}

void Button::setImage(string imageName){
    if(!image.LoadFromFile(imageName)){
        cout << "erreur de chargement de l'image..." << endl;
    }else{
        isImage(true);
    }
}

void Button::setText(string text, int fontSize, Color color){
    buttonText.SetText(text);
    buttonText.SetSize(fontSize);
    buttonText.SetColor(color);
    isText(true);
}

void Button::drawButton(RenderWindow &app){

    Image cursor;
    Sprite button;
    Shape fond;
    if(statusImage){
        button.SetImage(image);
        if(largeur > hauteur){
            button.Resize(hauteur,hauteur);
            button.SetPosition(positionX+(largeur/2)-(button.GetSize().x)/2,positionY);
        }else{
            button.Resize(largeur,largeur);
            button.SetPosition(positionX,positionY+(hauteur/2)-(button.GetSize().y)/2);
        }
    }
    else if(statusText){
        buttonText.SetPosition(positionX+10,positionY);
    }
    if(!clicked)
        fond = Shape::Rectangle(positionX,positionY,positionX+largeur,positionY+hauteur,backgroundColor,2,borderColor);
    else
        fond = Shape::Rectangle(positionX,positionY,positionX+largeur,positionY+hauteur,backgroundColor,2,Color::White);

    app.Draw(fond);
    if(statusImage)
        app.Draw(button);
    else if(statusText)
        app.Draw(buttonText);

}

void Button::setBackgroundColor(Color color){
    backgroundColor = color;
}

void Button::setBorderColor(Color color){
    borderColor = color;
}

void Button::setSize(int h, int l){
    hauteur = h;
    largeur = l;
}

void Button::setPosition(float x, float y){
    positionX = x;
    positionY = y;
}

void Button::setEvent(Event &event){

    if(event.Type == Event::MouseButtonPressed){
        if(event.MouseButton.X > positionX && event.MouseButton.X < positionX + largeur && event.MouseButton.Y > positionY && event.MouseButton.Y < positionY + hauteur)
            clicked = true;
    }else if(event.Type == Event::MouseButtonReleased){
        clicked = false;
    }
}


